package com.hospital.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.hospital.entity.User;

import java.util.List;
import java.util.Map;

/**
 * 用户服务接口
 *
 * @author Hospital Management System
 */
public interface UserService extends IService<User> {

    /**
     * 获取用户列表（管理员用）
     */
    List<User> getUsers(String keyword);

    /**
     * 获取用户列表（分页查询）
     */
    Map<String, Object> getUsersWithPagination(String keyword, Integer role, Integer status, Integer page, Integer size);

    /**
     * 重置密码
     */
    void resetPassword(Long userId);

    /**
     * 修改用户状态
     */
    void changeStatus(Long userId, Integer status);

    /**
     * 根据用户名查找用户
     */
    User findByUsername(String username);

    /**
     * 根据用户名和角色查找用户
     */
    User findByUsernameAndRole(String username, Integer role);

    // ==================== 医生相关功能 ====================

    /**
     * 获取当前登录医生
     */
    User getCurrentDoctor();

    /**
     * 获取医生列表（带分页和筛选）
     * @param keyword 搜索关键词
     * @param departmentId 科室ID
     * @param status 状态
     * @param page 页码
     * @param size 每页大小
     * @return 分页结果
     */
    Map<String, Object> getDoctorsWithPagination(String keyword, Long departmentId, Integer status, Integer page, Integer size);

    /**
     * 获取医生列表
     */
    List<User> getDoctors(String keyword);

    /**
     * 获取科室的医生列表
     */
    List<User> getDoctorsByDepartment(Long departmentId);

    /**
     * 获取医生详情
     */
    User getDoctorDetail(Long doctorId);

    // ==================== 管理员相关功能 ====================

    /**
     * 获取当前登录管理员
     */
    User getCurrentAdmin();

    /**
     * 获取管理员列表
     */
    List<User> getAdmins(String keyword);

    /**
     * 统计今日新增用户数
     */
    long countNewUsersToday();

    /**
     * 根据角色统计用户数
     */
    long countByRole(Integer role);
} 